
#include "Felix.h"

using namespace std;

//Metodos de la clase.
//Constructor que envía por parámetro a la clase heredada.
Felix::Felix(unsigned short int id,
			 unsigned short int idImagen,
			 int posX, int posY, int alto, int ancho,
			 unsigned char tipo,
			 bool vivo,
			 unsigned short int vidas,
			 unsigned short int posVidrio,
			 int puntos) : Elemento(id,idImagen, posX, posY, alto, ancho, tipo, vivo){
	this->posVidrio = posVidrio;
	this->vidas 	= vidas;
	this->puntos 	= puntos;
	this->inmune	= false;
}

//Destructor
Felix::~Felix(){
	free(this);
}

/* Getters */
unsigned short int Felix::getPosVidrio(){
	return this->posVidrio;
}

unsigned short int Felix::getVidas(){
	return this->vidas;
}

int Felix::getPuntos(){
	return this->puntos;
}

//Metodo de creacion
unsigned short int Felix::aparecer(){
	//TODO
	return CONST_UNO;
};

//Metodo de destruccion
unsigned short int Felix::desaparecer(){
	//TODO
	return CONST_UNO;
};

//Metodo de reparacion de ventana.
void Felix::reparar(){
	this->puntos += PTOS_REP_VIDRIO;
};

//Metodo de reparacion de ventana.
unsigned short int Felix::consumirTorta(){
	this->inmune = CONST_TRUE;
	return CONST_CERO;
};

//Metodo de reparacion de ventana.
unsigned short int Felix::sumarPuntos(int puntos){
	this->puntos += puntos;
	return CONST_UNO;
};

bool Felix::isInmune(){
	return this->inmune;
};

void Felix::setInmune(bool inmune){
	this->inmune = inmune;
}

void Felix::setPosVidrio(unsigned short int posVidrio){
	this->posVidrio = posVidrio;
}

/* Se mueve el offset indicado para cada eje, y actualiza el vidrio dode esta posicionado */
void Felix::moverse(int offsetX, int offsetY){
	//realizo el movimiento por defecto de la clase
	Elemento::moverse(offsetX, offsetY);
	//Muevo la posicion en el vidrio tambien, en el sentido del offset.
	this->posVidrio += (((offsetX/ANCHO_MOV_X_FELIX) * ANCHO_MOV_VID_X_FEL)+ ((offsetY/ANCHO_MOV_Y_FELIX) * ANCHO_MOV_VID_Y_FEL));

	//TODO: Ver el sentido si no hay que multiplicar por menos uno el incremento de vidrio
}

/* Metodo para quitarle una vida a felix */
void Felix::restarVida(){
	this->vidas--;

	/* Si se quedo sin vidas lo mato */
	if(this->vidas == CONST_CERO)
		this->vivo = CONST_FALSE;
}
